package com.spark.WorCount.sql

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

object DataFrameByScala {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
      .setMaster("local")
    //创建SparkSession对象，里面包含SparkContext和SqlContext
    val sparkSession=SparkSession.builder()
      .appName("SparkSqlTestByScala")
      .config(conf)
      .getOrCreate()
    //读取json文件，获取DataFrame
    val stuDf = sparkSession.read.json("datas/student.json")
    //printSchema() 输出DataFrame的Scheme的结构信息
    stuDf.printSchema()
    //show(count) 默认显示DataFrame中的所有数据，可以指定参数输出数据的个数
    stuDf.show(2)
    //select(column1，column2.....) 查询数据中指定字段的信息
    //在使用select的时候可以对数据做一些操作，需要添加隐式转换函数，否则语法报错
    import sparkSession.implicits._
    stuDf.select("name","age").show()
    stuDf.select($"name",$"age"+1).show()
    //filter()、where() 对数据进行过滤（条件查询）

    //在使用filter或者where进行条件过滤 需要添加隐式转换函数，否则语法报错
    import sparkSession.implicits._
    stuDf.filter($"age">18).show()
    //groupBy() 对数据按照指定字段进行分组
    //count() 计算数据的个数
    stuDf.groupBy("sex").count()
    sparkSession.stop()
  }
}
